---@class spi
---https://nodemcu.readthedocs.io/en/release/modules/spi/
spi = {
    MASTER = "MASTER",
    SLAVE = "SLAVE",
    CPOL_LOW = "CPOL_LOW",
    CPOL_HIGH = "CPOL_HIGH",
    CPHA_LOW = "CPHA_LOW",
    CPHA_HIGH = "CPHA_HIGH",
    ---半双工
    HALFDUPLEX = "HALFDUPLEX",
    ---全双工
    FULLDUPLEX = "FULLDUPLEX"
}

---从SPI接收数据。
---@param id number @SPI ID号:0为SPI,1为HSPI
---@param size number @需要读取的数据大小
---@param default_data number 在MOSI上发送的默认数据(如果省略则为all-1)
---@return string @包含从SPI读取的字节的字符串。
function spi.recv(id, size, default_data)
end

---	以半双工方式通过SPI发送数据。以全双工模式发送和接收数据。
---@param id number @SPI ID号:0为SPI,1为HSPI
---@param data string|table|number @数据可以是字符串、表或整数。每个数据项用bits
---@return number,string @wrote 写入字节数，rdata 配置时接收的数据与相应的数据参数相同的数据类型
function spi.send(id, data)
end

---设置SPI配置。有关时钟极性和相位定义的详细信息，请参阅串行外围接口总线。
---调用将把HSPI信号路由到相关引脚，覆盖以前的配置和模块的控制。
---如果不需要HSPI功能，可以将任何引脚恢复到gpio控制，只需设置所需的。
---这是特别推荐的HSPI /CS引脚功能，如果SPI从选择是从不同的引脚由- 否则SPI引擎将切换引脚8。
---@param id number @SPI ID号:0为SPI,1为HSPI
---@param mode spi.MASTER|spi.SLAVE @目前不支持spi.SLAVE
---@param cpol spi.CPOL_LOW|spi.CPOL_HIGH
---@param cpha spi.CPHA_LOW|spi.CPHA_HIGH
---@param databits number @每个数据项的位数，范围1 - 32
---@param clock_div @SPI时钟分频器，f(SPI) = 80 MHz /， 1 ..N(0默认为分割器8)
---@param duplex_mode @双工模式
---@return nil
function spi.setup(id, mode, cpol, cpha, databits, clock_div, duplex_mode)
end

---	Set the SPI clock divider.
---@param
---@return nil
function spi.set_clock_div()
end

---	Extract data items from MISO buffer after spi.
---@param
---@return nil
function spi.get_miso()
end

---	Insert data items into MOSI buffer for spi.
---@param
---@return nil
function spi.set_mosi()
end

---
---@param
---@return nil
function spi.transaction()
end
